import random
import sys

from PySide6 import QtCore, QtWidgets


# 创建 MainWindow 类，继承自 QWidget
class MainWindow(QtWidgets.QWidget):
    def __init__(self, *args, **kwargs):
        """
        构造函数，初始化 MainWindow 类

        参数：
            *args, **kwargs：传递给父类的参数
        """
        # 调用父类的初始化方法
        super().__init__(*args, **kwargs)

        # 初始化 hello 列表，用于存储不同语言的问候语
        self.hello = ["你好世界", "Hallo Welt", "Hei maailma", "Hola Mundo", "Привет мир"]

        # 设置窗口大小
        self.resize(600, 400)

        # 设置窗口标题
        self.setWindowTitle("Hello World")

        self.button = QtWidgets.QPushButton('click me!')
        self.label = QtWidgets.QLabel('Hello World!', alignment=QtCore.Qt.AlignCenter)

        # 创建一个「垂直盒子」布局管理器
        self.layout = QtWidgets.QVBoxLayout(self)

        # 将之前创建的控件添加到布局管理器中，即完成布局
        self.layout.addWidget(self.label)
        self.layout.addWidget(self.button)

        # 将button.clicked这个信号与self.magic槽函数连接
        self.button.clicked.connect(self.magic)

    @QtCore.Slot()
    def magic(self):
        # It is used to randomly select an element from a sequence, such as a list, tuple, or string
        title = random.choice(self.hello)
        self.label.setText(title)
        # 设置窗口标题
        self.setWindowTitle(title)


if __name__ == '__main__':
    """
    这行代码是在 PySide6 库中创建一个 QApplication 对象，并将命令行参数 sys.argv 传递给它。
    QApplication 类是 PySide6 库中所有 Qt 应用程序的基类。
    这个对象负责管理应用程序的控制流程和事件循环，是应用程序运行的基础。
    传递 sys.argv 是一种常见的做法，这样应用程序可以接收在启动时通过命令行参数传递的任何额外信息。例如，你可能希望在启动应用程序时传递特定的配置选项或文件名。
    在这个例子中，app = QtWidgets.QApplication(sys.argv) 这行代码创建了 QApplication 对象，确保了 Qt 框架的正确初始化，以便后续可以创建和显示窗口，以及处理用户与应用程序的交互。
    以下是这行代码的详细解释：
    QtWidgets.QApplication：这部分表示从 QtWidgets 模块中引入 QApplication 类。QApplication 代表了应用程序对象。
    sys.argv：这是一个列表，包含了启动脚本时传递的命令行参数。sys.argv[0] 通常是脚本的名称，之后的参数则是用户在命令行上提供的其他数据。
    通过将 sys.argv 作为参数传递给 QApplication 的构造函数，你允许应用程序在启动时访问这些命令行参数，使得应用程序更加灵活和可配置。
    在 PySide6 中，QApplication 对象扮演着应用程序生命周期的核心角色，它负责处理事件循环，确保应用程序能够响应和处理用户的操作。
    """
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())
